Micron Document
██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝


🬧 The NomadNet Encyclopedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

🔍 Search

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Gnutella2
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwawGnutella2 (mwbaG2) è un mwbqprotocollo mwbgpeer-to-peer principalmente sviluppato da Michael Stokes. Ispirato dal protocollo mwbwGnutella, G2 condivide un po' del suo design con l'eccezione del suo metodo di connessione, e adotta un mwcaalgoritmo di ricerca interamente nuovo.

Contents

Storia
Design
Note

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Storia

Nel novembre mwda2002, Michael Stokes ha annunciato il protocollo Gnutella2 nel Gnutella Developers Forum, che ha immediatamente causato uno scisma tra gli sviluppatori. Alcuni pensavano che l'obiettivo del nuovo protocollo fosse quello di staccarsi nettamente dal protocollo Gnutella 0.6 e ripartire in modo che il kludge assumesse una buona organizzazione, per essere di grande effetto e desiderabile. Altri sviluppatori, principalmente quelli di mwdwLimeWire e mweaBearShare, pensarono invece ad un'abile ed economica mossa pubblicitaria e negarono alcun merito tecnico. Molte persone di questi gruppi rifiutano tuttora di riferirsi a tale protocollo come "Gnutella2" e lo chiamano invece come "Mike's Protocol" (Protocollo di Mike).cite-ref-gdf-discussion-on-the-gnutella2-name-1-0[1]

Curiosamente il protocollo Gnutella2 utilizza tuttora la vecchia stringa di handshake "GNUTELLA CONNECT/0.6" per instaurare le sue connessionicite-ref-gnutella2-handshakes-2-0[2] come definito nelle specifiche di Gnutella 0.6 che sono state criticate dal GDF come un tentativo di utilizzare la rete Gnutella per il mwggmwgwbootstrapping delle nuove, non correlate, reti mentre i propositori della nuova rete sostenevano che il loro intento fosse quello di mantenere una retro-compatibilità con Gnutella per permettere agli attuali mwhaclient Gnutella di aggiungere Gnutella2 a loro piacimento.

Con gli sviluppatori trincerati nelle loro posizioni, una guerra sui forum si scatenò presto attorno allo sviluppatore di BearShare, Vincent Falco, che perse la calma e cominciò a insultare chiunque non fosse d'accordo con lui.cite-ref-gnutella2-flame-war-1-3-0[3]cite-ref-gnutella2-flame-war-2-4-0[4]cite-ref-gnutella2-flame-war-3-5-0[5]cite-ref-gnutella2-flame-war-4-6-0[6]

I progetti furono pubblicati il 26 marzo mwma2003 seguiti poco dopo da una specifica dettagliata. Gnutella2 (G2) non è supportato da molti dei vecchi clients Gnutella, comunque molti clients Gnutella2 possono anche connettersi a Gnutella. Molti sostenitori di Gnutella2 asseriscono che dietro c'è una motivazione "politica" dietro questa scelta, mentre i sostenitori di Gnutella affermano che ci sono ragioni tecniche che non permetto l'utilizzo del nuovo protocollo.cite-ref-developer-discussion-on-migration-to-gnutella2-7-0[7]

Design

Gnutella2 divide i mwnwnodi in due gruppi, chiamati leaf e hubs. I leaf mantengono una o due connessioni ad un hubs, mentre gli hubs accettano milioni di leaf contemporaneamente, e diverse connessioni da altri hubs. Quando viene avviata una ricerca, il nodo ottiene una lista di hubs e contatta gli hubs nella lista, notificando quello che si sta cercando, finché la lista non viene terminata, o il limite di ricerca predefinito viene soddisfatto. Questo permette agli utilizzatori di trovare un file popolare facilmente, senza caricare ogni volta il network, che teoricamente mantiene la capacità per un utente di trovare un singolo file localizzato ovunque nel network.

Gli hubs indicizzano i file posseduti da una leaf grazie ad una tabella di routing di ricerca chiamata "Query Routing Table", la quale viene riempita da record contenenti gli hash delle parole chiave e viene inviata dai leaf agli hub, l'hub poi unisce tutte le tabelle ricevute dai suoi leaf in modo da crearne una globale da inviare ai suoi hubs vicini. Questo permette agli hubs di ridurre enormemente l'utilizzo di banda semplicemente non inoltrando le ricerche a leaf e hub vicini se i parametri della ricerca non vengono trovati nelle tabelle di routing.

Gnutella2 si appoggia prevalentemente sul protocollo mwogUDP, anziché sul protocollo mwowTCP, per le ricerche. Il sovraccarico necessario per una connessione TCP renderebbe il sistema di ricerca a Percorso casuale dovendo contattare un grande numero di nodi per piccole quantità di dati; impraticabile. Anche UDP, in ogni caso, ha i suoi difetti. Siccome UDP è un mwpqProtocollo connectionless, non c'è modo di notificare ai client che un messaggio è stato ricevuto, quindi non si può sapere se un pacchetto viene perso. Per questo motivo, i pacchetti UDP inviati da client Gnutella2 hanno un flag che aumenta l'affidabilità del pacchetto. Quando un pacchetto UDP con il flag di affidabilità abilitato viene ricevuto, il client risponderà con un pacchetto di mwpgacknowledge per informare il client mittente che il pacchetto è arrivato a destinazione. Se il pacchetto di acknowledge non viene inviato, il pacchetto verrà ritrasmesso nel tentativo di assicurarne la consegna. I pacchetti a bassa priorità che non hanno il flag abilitato non richiedono un pacchetto di risposta, riducendone l'affidabilità, ma riducendo anche il sovraccarico poiché non richiedono la trasmissione di nessun pacchetto di acknowledge.

Caratteristiche del protocollo

Gnutella2 ha un formato estensibile del pacchetto binario, comparabile all'albero di un documento mwqqXML, che fu concepito come risposta ai molti Kludges utilizzati in Gnutella. Il formato era stato progettato in modo che futuri miglioramenti della rete e nuove caratteristiche potessero essere aggiunte senza la preoccupazione che questo potessero generare errori in altri client sulla rete.cite-ref-8[8]. Mentre gli sviluppatori arrivati dopo la mwrwflame war hanno detto che questa caratteristica rende più facile realizzare il codice di un client per Gnutella2 piuttosto che per Gnutellacite-ref-developer-discussion-of-gnutella-and-gnutella2-packet-formats-9-0[9], gli sviluppatori di Gnutella sostengono che il Generic Gnutella Extension Protocol (GGEP) garantisce flessibilità per la realizzazione di estensioni per il protocollo Gnutella 0.6.

Gnutella2 utilizza SHA-1 hashes per l'identificazione dei file e per la verifica sicura dell'integrità dei file stessi. Per permettere ad un file di essere scaricato correttamente da sorgenti multiple, così come per permettere l'upload delle parti di file di cui è già stato effettuato il mwtwdownload (swarming), vengono utilizzati hash Tiger tree.cite-ref-g2-standard-10-0[10]

Per creare un sistema di ricerca completo e robusto, Gnutella2 ha anche un sistema di mwvgmetadata per una migliore etichettatura, rating e qualità dell'informazione in modo da fornire risultati della ricerca che dovrebbero essere semplicemente raccolti per nome.cite-ref-11[11] I nodi possono condividere queste informazioni anche dopo la cancellazioine del file, permettendo agli utenti di segnalare viruses e worm sulla rete senza doverne scaricare una copia.

Gnutella2 utilizza anche la compression nelle sue connessioni di rete per ridurre la banda utilizzata.cite-ref-g2-standard-10-1[10] mwyqShareaza ha caratteristiche aggiuntive per richiedere anteprime di immagini e video, caratteristica che attualmente nessun altro client può vantare.

Differenze tra Gnutella2 e Gnutella

I due networks sono simili, con una differenza primaria nel formato dei pacchetti e nella metodologia di ricerca.

Protocollo

Il formato dei pacchetti di Gnutella è stato spesso criticato perché non è stato originariamente realizzato in modo espandibile, ed ha avuto diverse modifiche durante il passare degli anni, lasciando la struttura del pacchetto sempre inefficiente. Gnutella2 ha imparato molto da questo caso, ed oltre ad aver portato molte delle caratteristiche degli standard Gnutella in Gnutella2, è stato adattato per l'espandibilità futura sin dalla nascita.

Algoritmo di ricerca

Quando Gnutella usa il metodo di ricerca del query flooding, Gnutella2 usa un sistema in cui un nodo di ricerca raccoglie una lista di mwaqHub e li contatta direttamente, uno alla volta. Questo ha molti vantaggi sul sistema di query flooding di Gnutella. È più efficiente, visto che continuare una ricerca non aumenta il traffico di rete, i query non sono indirizzati attraverso molti nodi, ed aumenta la granularità della ricerca, permettendo a un client di fermarsi quando un numero di risultati predefinito è stato ottenuto più efficacemente che in Gnutella. questo incrementa anche la complessità della rete e la sua manutenzione richiesta, così come la richiesta di salvaguardie per prevenire a un virus di usare la rete per un attacco mwagDoS.

Terminologia

C'è anche una differenza nella terminologia, con i nodi più capaci per condensare la rete che è assegnata come Ultrapeers in Gnutella e come Hub in Gnutella2, e sono anche usati in modi leggermente differenti in topologia. In Gnutella, gli Ultrapeers mantengono un numero relativamente piccolo di leaves e un alto numero di connessioni peer, quando gli Hub di Gnutella2 mantengono molti più leaves, e meno connessioni peer. La ragione di questo è che i metodi di ricerca delle varie reti hanno differenti topologie ottimali.

Clients

I client Gnutella2 pubblicati come mwbwsoftware libero sono:

• mwcgSharelin (mwcwGNU/Linux), realizzato in mwdaC++, sotto mwdqLicenza GPL
• Adagio (Cross Platform), realizzato in mweaAda, sotto mweqLicenza GPL
• FileScope (Cross Platform), realizzato in mwfaC#, sotto mwfqLicenza GPL
• mwfwGnucleus (Windows), realizzato in mwgaC/mwgqC++, sotto mwggLicenza LGPL
• mwhaShareaza (Windows), realizzato in mwhqC++, sotto mwhgLicenza GPL
• mwiaMLDonkey (Cross Platform), realizzato in mwiqOcaml, sotto mwigLicenza GPL

Sono pubblicati, invece, come mwjasoftware proprietario:

• Dianlei
• Kiwi Alpha (Windows)
• mwkwMorpheus (Windows)
• Pocket G2 (Windows mwlgPocket PC)
• TrustyFiles (Windows)

Note

cite-note-gdf-discussion-on-the-gnutella2-name-11. mwnwmwoamwoqGDF Discussion on the Gnutella2 name, su mwoggroups.yahoo.com, The Gnutella Developer Forum. mwowURL consultato il 10 maggio 2006.
cite-note-gnutella2-handshakes-22. mwpwmwqamwqqDeveloper discussion of similarities between Gnutella and Gnutella2, su mwqggroups.yahoo.com, The Gnutella Developer Forum. mwqwURL consultato il 10 maggio 2006.
cite-note-gnutella2-flame-war-1-33. mwrwmwsamwsqPart of the Gnutella/Gnutella2 Flame War (1), su mwsggroups.yahoo.com, The Gnutella Developer Forum. mwswURL consultato il 6 agosto 2006.
cite-note-gnutella2-flame-war-2-44. mwtwmwuamwuqPart of the Gnutella/Gnutella2 Flame War (2), su mwuggroups.yahoo.com, The Gnutella Developer Forum. mwuwURL consultato il 6 agosto 2006.
cite-note-gnutella2-flame-war-3-55. mwvwmwwamwwqPart of the Gnutella/Gnutella2 Flame War (3), su mwwggroups.yahoo.com, The Gnutella Developer Forum. mwwwURL consultato il 6 agosto 2006.
cite-note-gnutella2-flame-war-4-66. mwxwmwyamwyqPart of the Gnutella/Gnutella2 Flame War (4), su mwyggroups.yahoo.com, The Gnutella Developer Forum. mwywURL consultato il 6 agosto 2006.
cite-note-developer-discussion-on-migration-to-gnutella2-77. mwzwmw0amw0qDeveloper discussion on migration to Gnutella2, su mw0ggroups.yahoo.com, The Gnutella Developer Forum. mw0wURL consultato il 10 maggio 2006.
cite-note-88. mw1wmw2amw2qPacket Structure, su mw2gg2.trillinux.org, Gnutella2 wiki. mw2wURL consultato il 7 novembre 2007.
cite-note-developer-discussion-of-gnutella-and-gnutella2-packet-formats-99. mw3wmw4amw4qDeveloper discussion of Gnutella and Gnutella2 packet formats, su mw4ggroups.yahoo.com, The Gnutella Developer Forum. mw4wURL consultato il 15 maggio 2006.
cite-note-g2-standard-1010. mw6qmw6gmw6wGnutella2 Standard, su mw7ag2.trillinux.org, Gnutella2 wiki. mw7qURL consultato il 7 novembre 2007.
cite-note-1111. mw8qmw8gmw8wSimple Query Language and Metadata, su mw9ag2.trillinux.org, Gnutella2 wiki. mw9qURL consultato il 7 novembre 2007.

Collegamenti esterni

• mw-qGnutella2 Wiki, su g2.trillinux.org.
• mw-wGnutella2 Crawler, su crawler.trillinux.org. URL consultato il 24 gennaio 2008 (archiviato dall'url originale il 1º maggio 2010).